"""
程序执行过程描述：
1. 解析缩进文本为树形结构 (parse_indented_text函数)
   - 示例输入: "A\n  B\n    C\n  D"
   - 步骤:
     1) 按行分割并去除首尾空行
     2) 创建根节点(depth=-1)
     3) 遍历每行:
        a) 计算缩进深度: len(line)-len(stripped)
        b) 创建新节点
        c) 通过栈结构寻找父节点
        d) 将节点添加到父节点的children中
     4) 返回根节点的第一个子节点
"""
def parse_indented_text(text):
    """将缩进文本解析为层级结构"""
    lines = text.strip().split('\n')
    root = {'name': '', 'depth': -1, 'children': []}
    stack = [root]
    
    for line in lines:
        stripped = line.lstrip()
        depth = len(line) - len(stripped)
        
        # 创建新节点
        node = {'name': stripped, 'depth': depth, 'children': []}
        
        # 寻找父节点
        while stack[-1]['depth'] >= depth:
            stack.pop()
        stack[-1]['children'].append(node)
        stack.append(node)
    
    return root['children'][0]  # 返回第一个根节点

"""
2. 生成树形连接符号 (generate_connectors函数)
   - 示例: depth=2, is_last=True → "│  └─ "
   - 步骤:
     1) 遍历每个深度级别
     2) 如果是最后一级:
        a) 使用'└─ '表示最后一个子节点
        b) 否则使用'├─ '表示非最后子节点
     3) 其他级别使用'│  '表示连接线
     4) 拼接所有连接符号
"""
def generate_connectors(depth, is_last):
    """生成树形连接符号"""
    connectors = []
    for i in range(depth):
        if i == depth - 1:
            connectors.append('└─ ' if is_last else '├─ ')
        else:
            connectors.append('│  ')
    return ''.join(connectors)

"""
3. 递归构建树形结构 (build_tree_lines函数)
   - 示例输入: 根节点(包含2个子节点)
   - 步骤:
     1) 生成当前节点的连接符号前缀
     2) 添加当前节点行
     3) 遍历子节点:
        a) 判断是否为最后一个子节点
        b) 递归处理每个子节点
     4) 返回所有行
"""
def build_tree_lines(node, depth=0, is_last=False):
    """递归构建树形结构"""
    lines = []
    
    # 当前节点
    prefix = generate_connectors(depth, is_last)
    lines.append(f"{prefix}{node['name']}")
    
    # 子节点
    for i, child in enumerate(node['children']):
        # Bug修复：修正赋值语句，判断当前子节点是否为最后一个子节点
        child_is_last = i == len(node['children']) - 1
        lines.extend(build_tree_lines(child, depth+1, child_is_last))
    
    return lines

"""
4. 主绘制函数 (draw_tree函数)
   - 示例输入: "A\n  B\n    C\n  D"
   - 步骤:
     1) 调用parse_indented_text解析文本为树结构
     2) 调用build_tree_lines构建树形文本行
     3) 用换行符连接所有行
     4) 返回最终树形图
"""
def draw_tree(text):
    """主绘制函数"""
    tree = parse_indented_text(text)
    tree_text = '\n'.join(build_tree_lines(tree))
    return cleanup_lines(tree_text)

def cleanup_lines(tree_text):
    """清除多余的树形连接线
    1. 读取最后一行内容并替换│为空格
    2. 检查倒数第二行与最后一行的对应字符关系
    3. 当第二行是│而第一行不是时进行替换
    """
    lines = tree_text.split('\n')
    if not lines:
        return tree_text
    
    # 处理最后一行
    if lines:
        last_line = lines[-1]
        lines[-1] = last_line.replace('│', ' ')
    
    # 处理所有行(从倒数第二行开始向上处理)
    for line_num in range(len(lines)-2, -1, -1):
        current_line = lines[line_num]
        last_line = lines[line_num+1]
        new_line = []
        for i, char in enumerate(current_line):
            if char == '│' and (i >= len(last_line) or last_line[i] == ' '):
                new_line.append(' ')
            else:
                new_line.append(char)
        lines[line_num] = ''.join(new_line)
    
    return '\n'.join(lines)

# 测试用例
input_text = """
Python
  Java
  JavaScript(Node.js)
    TypeScript
"""

print(draw_tree(input_text))